#include<iostream>
#include<queue>

using namespace std;
const int N=1000;

vector<int> arr[N];//存树数组，题目规定u是v父节点不用存两次
int fa[N];//f[i]表示i的父节点
int dist[N];//dist[i]表示i节点到x的位置
int depth(int u)//求深度
{
	int ret=0;
	for(auto l:arr[u])
	{
		ret= max(ret,depth(l));//递归找最大子树长度
	}
	return ret+1;
}
int bfs(int u)//求最大宽度
{
	queue<int> q;
	q.push(u);
	int ret=0;
	while(q.size())
	{
		int num=q.size();
		while(num--)
		{
			int a=q.front();q.pop();
			for(auto l:arr[a])
			{
				q.push(l);
			}
		}
		int size=q.size();
		ret=max(ret,size);
	}
	return ret;
}

int main()
{
	int n;cin>>n;
	for(int i=1;i<n;i++)
	{
		int u,v;cin>>u>>v;
		arr[u].push_back(v);
		fa[v]=u;
	}
	cout<<depth(1)<<endl;
	cout<<bfs(1)<<endl;
	int x,y;cin>>x>>y;
	while(x!=1)//向上爬到根节点
	{
		dist[fa[x]]=dist[x]+1;//父节点到此距离
		x=fa[x];
		//求出上面父节点，包括父节点的父节点到x距离
	}
	int len=0;
	while(y!=1&&dist[y]==0)//等于0说明没碰到标记点
	{
		len++;
		y=fa[y];
	}
	cout<<dist[y]*2+len;
	return 0;
}